<?php include_once "config/config.php"; ?>
<div class="content">
    <h2>Įrašai duomenų bazės lentelėse</h2>
    <p>Jau aptarėme, kad įrašai duomenų bazėse saugomi lentelėse.</p><br />
    <p>Prisiminkime pavyzdį, kur lentelėje pateikti mokinių duomenys</p>    

    <br />
    <table border="1" class="text" cellpadding="0" cellspacing="0" width="350px">
        <tr class="head">
            <td><span>Vardas</span></td><td><span>Pavardė</span></td><td><span>Klasė</span></td><td><span>Vidurkis</span></td>
        </tr>
        <?php
            function piestiMokinius($ak){
                $result = mysql_query("SELECT asmens_kodas, vardas, pavarde, vidurkis, klase FROM mokiniai");
                $mokiniai = array();
                $i = 0;
                while ($row = mysql_fetch_array($result)) {
                    $mokiniai[$i]['ak'] = $row['asmens_kodas'];
                    $mokiniai[$i]['vardas'] = $row['vardas'];
                    $mokiniai[$i]['pavarde'] = $row['pavarde'];
                    $mokiniai[$i]['klase'] = $row['klase'];
                    $mokiniai[$i]['vidurkis'] = $row['vidurkis'];
                    $i++;
                }
                for ($i = 0; $i < count($mokiniai); $i++) {
                    if ($i < 5) {
                    echo('<tr>');
                    if($ak){echo('<td class="textp"><span>'.$mokiniai[$i]['ak'].'</span></td>');}
                    echo('<td class="textp"><span>'.$mokiniai[$i]['vardas'].'</span></td>');
                    echo('<td class="textp"><span>'.$mokiniai[$i]['pavarde'].'</span></td>');
                    echo('<td style="textr"><span>'.$mokiniai[$i]['klase'].'</span></td>');
                    echo('<td style="textr"><span>'.$mokiniai[$i]['vidurkis'].'</span></td>');
                    echo('</tr>');
                    }
                }
            }
            $AK = false;
            piestiMokinius($AK);
        ?>
    </table>
    <br />
    <p>Šioje lentelėje saugomi 3 laukai, skirti mokinio vardui, pavardei, bei klasei, kurioje jis mokosi.</p><br />
    <p>Pirmame DB lentelės stuleplyje rašomas įrašo vardas, antrajame - atributo tipas, o trečiajame lauko ilgis. Vardao, pavardės, klasės laukai yra tekstiniai, o vidurkis - realusis skaičius. Taigi DB lentelė atrodytų taip:</p><br />
    <table border="1" class="text" cellpadding="0" cellspacing="0" width="450px">
        <tr class="head">
            <td><span>Lauko vardas - NAME</span></td>
            <td><span>Tipas - TYPE</span></td>
            <td><span>Lauko ilgis - LENGTH</span></td>
        </tr>
        <tr>
            <td class="textp"><span>vardas</span></td>
            <td class="textp"><span>VarChar (tekstas)</span></td>
            <td class="textp"><span>20 simbolių</span></td>
        </tr>        
        <tr class="textp">
            <td class="textp"><span>pavarde</span></td>
            <td class="textp"><span>VarChar (tekstas)</span></td>
            <td class="textp"><span>50 simbolių</span></td>
        </tr> 
        <tr class="textp">
            <td class="textp"><span>klase</span></td>
            <td class="textp"><span>VarChar (tekstas)</span></td>
            <td class="textp"><span>10 simbolių</span></td>
        </tr>
        <tr class="textp">
            <td class="textp"><span>Vidurkis</span></td>
            <td class="textp"><span>double</span></td>
            <td class="textp"><span>-</span></td>
        </tr>          
    </table>
    <br />
    <p>Nors duomenų bazių lentelės dažniausiai kuriamos kokiame nors tam skirtame redaktoriuje, su jomis galima dirbti ir programiškai.</p><br/>
    <pre class="code">
        <code>
CREATE TABLE lenteles_vardas
    (stulpelis1 lauko_tipas,
     stulpelis2 auko_tipas,
     stulpelis3 lauko_tipas);</code>
    </pre>
    <br /><p>Norint sukurti naują lentelę duomenų bazėje, iššaukti komandą <b>create table</b>, nurodant laukų vardus bei tipus. Šalia lauko galima nurodyti
    įvairius apribojimus ar laukų ilgius. Visi laukai atskiriami kableliu ("<b>,</b>"), komanda baigiama, gale parašius kabliataškį ("<b>;</b>")</p><br />
    <p>Lentelių vardams galima naudoti raides, skaičius ar žemus pabraukimus ("_"), tačiau jis <b>privalo prasidėti raide</b>. Pavadinimas
    negali būti ilgesnis nei 30 simbolų. Nei lentelių vardams, nei stulpelių pavadinimams negalima naudoti rezervuotų raktinių žodžių, kaip
    "select", "create", "insert", "update" ir t.t.</p><br />
    
    <p>
        Lauko tipas priklausomas nuo to, kokia informacija jame saugoma. Jei laukas tekstinis, pnaudojama <b>varchar</b> (variable length character - kintamo
        ilgio simboliai), jei reikia skaičiaus - <b>int</b> arba <b>double</b>.
    </p><br />
    <table border="1" class="text" cellpadding="0" cellspacing="0" width="850px">
        <tr style="vertical-align:top;">
            <td><span class="head">int, integer, tinyint,<br /> bigint</span></td>
            <td class="textp"><span>Sveikas(tikslus) skaičius. Dažnai naudojama identifikuoti įrašus. Reikšmių intervalai:</span><br />
                <table border="0" cellpadding="0" class="text" width="90%">
                    <tr><td>bigint = 2^63;</td></tr>
                    <tr><td>int = 2^31;</td></tr>
                    <tr><td>smallint = 2^15;</td></tr>
                    <tr><td>tinyint = 2^8;</td></tr>
                </table>
            </td>
        </tr>
        <tr>
            <td><span class="head">float, double</span></td>
            <td class="textp">Apytikslis skaičius.</td>
        </tr>
        <tr>
            <td><span class="head">bit</span></td>
            <td class="textp">Sveikas skaičius. Reikšmių intervalas: 0 arba 1. Patogu naudoti kaip "Taip"/"Ne" indikatorių.</td>
        </tr>
        <tr>
            <td><span class="head">decimal, smallmoney, <br />money</span></td>
            <td class="textp">Skaičius su kableliu. </td>
        </tr>
        </tr>
        <tr>
            <td><span class="head">datetime, date</span></td>
            <td class="textp">Datai fiksuoti. Reikšmių intervalas: nuo 1753 m. sausio 1 d. iki 9999 m. gruodžio 31 d.</td>
        </tr>
        <tr>
            <td><span class="head">char</span></td>
            <td class="textp">Fiksuoto ilgio simbolių eilutė. Jeigu nurodomas maksimalus ilgis, neišnaudota erdvė užpildoma tarpais. Max 8000 simbolių.</td>
        </tr>
        <tr>
            <td><span class="head">varchar, text</span></td>
            <td class="textp">Kintamo ilgio simbolių eilutės. Text laukas gali būti daug ilgesnis, nei char ar varchar, iki 2^31 simbolių.</td>
        </tr>          
    </table>
    <br />
    <p>Keli lentelės laukai gali turėti <b>apribojimus</b>, kurių privaloma paisyti vedant duomenis į lentelę. Tarkime apribojimas "NOT NULL" nusako,
    kad vedant duomenis privaloma užpildyti šį lauką., "UNIQUE" arba "PRIMARY KEY" nusako, kad šiame stulpelyje negali kartotis reikšmės. Skirtums tas,
    kad dažnu atveju, įvedus blogą PRIMARY KEY reikšmę, jos neįmanoma iškart pataisyti. Reikėtų ištrinti įrašą ir įvesti iš naujo su jau teisingu raktu.
    UNIQUE reikšmę galima taisyti bet kada, tik svarbu, kad įvesta reikšmė nesikartotų. Grįžkime prie "Mokinių" lentelės ir papildykime ją lauku "asmens kodas".
    </p><br />
    <table border="1" class="text" cellpadding="0" cellspacing="0" width="450px">
        <tr class="head">
            <td><span>Asmens kodas</span></td><td><span>Vardas</span></td><td><span>Pavardė</span></td><td><span>Klasė</span></td><td><span>Vidurkis</span></td>
        </tr>
    
        <?php
            $AK = true;
            piestiMokinius($AK);
        ?>
    </table><br />
    <p>Šiuo atveju, kiekvienas asmens kodas yra unikalus ir jį sudaro po 11 skaitmenų. Tikimybė padaryti klaidą, vedant juos ranka, labai didelė.
    Taigi daug paprasčiau šį lauka paskelbti "unikaliu", o pirminiu raktu paskelbti lauką, pavyzdžiui, "id", kuris atitiktų įrašo eilės numerį - turėtų savybę "auto increment".
    Šios lentelės sukūrimo komanda:</p><br />
    <pre class="code">
        <code>
CREATE TABLE Mokiniai
    (id int NOT NULL AUTO_INCREMENT,
     asmens_kodas bigint NOT NULL,   
     vardas varchar(20) NOT NULL,
     pavarde varchar(50) NOT NULL,
     klase varchar(10) NOT NULL,
     vidurkis double,
     PRIMARY KEY (id),
     UNIQUE (asmens_kodas));
        </code>    </pre>
    <br /><p>Sukuriama lentelė "Mokiniai". Vedant duomenis į lentelę privaloma įvesti mokinio vardą, pavardę, asmens kodą bei klasę, kurioje jis mokosi.
    Laukas id unikalus identifikatorius, jo vesti nereikia, nes jis turi savybę "auto increment".</p><br />
		
    <div>
        <h2>Pratybos</h2>
        <p>Sukurkite naują lentelę, kurioje būtų galima saugoti <b>sesijos suvestinės</b> informaciją (mokinio semestro pažymių vidurkius).
        Lentelėje turi atsispindėti <b>pamoka</b>, <b>pamokos kodas</b>, <b>mokytojas</b>, kuris dėstė šią pamoką, <b>
        mokinys</b>, kurio pažymius vedate, <b>pažymys</b> bei <b>data</b>.</p><br />
        <p><b>Lentelės pavadinimui panaudokite  tris savo vardo ir tris pavardės raides bei šiandienos datą</b> (pvz. "varpav_20120101").</p><br />
        
        <form class="forma" action="insertQueryCREATE.php" method="post">
            <table>
                <tr><td><textarea cols="50" rows="10" name="sql_code"></textarea></td></tr>
                <tr><td style="text-align:right;"><input type="submit" value="Sukurti" /></td></tr>
            </table>
        </form>
    </div>
</div>